<?php
namespace Peas\Kernel;

use Peas\Kernel\System\Application;
use Peas\Kernel\System\Runtime;
use Peas\Kernel\System\ActionContext;
use Peas\Routing\Router;
use Peas\Http\HttpUtils;

/**
 * Peas Framework
 *
 * 工具类
 *
 * @author  Hongzan Zhang <zhanghongzan@163.com>
 * @version $Id$
 */
class PeasUtils
{
    /**
     * 404
     *
     * @param  string $url 错误访问的url
     * @return void
     */
    public static function to404($url = '')
    {
        Application::to404($url);
    }

    /**
     * 500
     *
     * @param  string $errInfo 错误信息
     * @return void
     */
    public static function to500($errInfo = '')
    {
        Application::to500($errInfo);
    }

    /**
     * 根据当前Url规则生成URL
     *
     * @param  string $url URL表达式，格式：'分组/模块/操作?参数1=值1&参数2=值2...#锚点'，如：user/login?username=a&password=b
     * @return string 根据当前Url规则生成的Url
     */
    public static function createUrl($url)
    {
        return Router::createUrl($url);
    }


    /**
     * 全局变量读取、设置，如果仅指定了变量名则返回该变量值，同时指定变量名和变量值则为设置变量
     *
     * @param  string $name  变量名
     * @param  mixed  $value 变量值
     * @return mixed
     */
    public static function globalVar($name = '', $value = '__PEAS__G__VAL__')
    {
        return Application::globalVar($name, $value);
    }


    /**
     * 手机访问检测
     */
    public static function mobileCheck()
    {
        if (!empty($_REQUEST['aj'])) {
            return;
        }
        $isMobile = HttpUtils::isMobile();
        $isMobileUrl = (stripos(ActionContext::$controller, '\\Controller\\M\\') === false) ? false : true;
        if ($isMobile == $isMobileUrl) {
            return;
        }
        $url = ($isMobile && !$isMobileUrl) ? ('m/' . ActionContext::$url) : substr(ActionContext::$url, 2);
        if (Runtime::matchActionFromUrl($url)) {
            $queryStr = '';
            if (!empty($_GET)) {
                $queryArr = [];
                foreach ($_GET as $key => $val) {
                    $queryArr[] = ($key . '=' . $val);
                }
                $queryStr = '?' . implode('&', $queryArr);
            }
            HttpUtils::redirect(self::createUrl($url . $queryStr) . (empty($url) ? '/' : ''));
        }
    }
}
